// app application 应用程序
// 把当前模块所有的依赖项都声明在文件模块最上面
// 为了让目录结构保持统一清晰，所以我们约定，把所有的HTML文件放在views文件夹
// 为了方便的统一处理这些静态资源，所以我们约定把所有的静态资源都放在public文件夹
// 哪些资源可以被访问，哪些不能访问，我们可以通过代码来控制

//  开放的 / index
//  /public 整个目录中的资源允许访问



var http = require('http');
var fs = require('fs');
var tem = require('art-template')
var url = require('url')

var comments = [
    {
        name:'张三1',
        message:'11111',
        date:'2020'
    },{
        name:'张三2',
        message:'11111',
        date:'2020'
    },{
        name:'张三3',
        message:'11111',
        date:'2020'
    },{
        name:'张三4',
        message:'11111',
        date:'2020'
    },
]
// http://127.0.0.1:3000/push?name=111&content=222
// 对于这种表单提交的请求路径，由于其中具有用户动态填写的内容
// 所以你不可能通过去判断完整的 URL 路径来处理这个请求
// 
// 结论：对于我们来讲，其实只需要判定，如果你的请求路径是 /push 的时候，
// 那我就认为你提交表单的请求过来

http
    .createServer(function (req,res) {
        // 使用 url.parse() 方法把请求路径解析为一个方便操作的对象。
        // 第二个参数为 true 表示直接将查询字符串为一个对象（通过query属性来访问）
        var parseObj = url.parse(req.url,true);
        // var parseObj = new URL(req.url)
        


        // 单独获取不包含查询字符串的路径部分,该部分不包含 ？ 之后的那部分
        var pathname = parseObj.pathname;
        console.log(pathname)
        // var url = req.url;
        if (pathname === '/') {
           fs.readFile('./views/index.html',function (err,data) {
               if (err) {
                   return res.end('404 Not Found.')
               }
              var htmlStr = tem.render(data.toString(),{
                   comments: comments
               })
               res.end(htmlStr)
           }) 
           
        }else if (pathname === '/push') {
            // 注意无论 /push?xxx 之后是什么，我都不用担心了
            // 因为我的 pathname 是不包含 ？ 之后的那部分
            console.log(new URLSearchParams(parseObj.search))
            var comment = new URLSearchParams(parseObj.search)
            // comment.date = (new Date()).toString()
            comments.unshift({
                name:comment.get('name'),
                message:comment.get('message'),
                date:new Date()
            })
            
            res.statusCode=302
            res.setHeader('Location','/')
            res.end()
        }
        else if (pathname === '/post') {
               fs.readFile('./views/post.html',function (err,data) {
                   if (err) {
                       return res.end('404 Not Found.')
                   }
                   res.end(data)
               })
        }else if (pathname.indexOf('/public/') === 0) {
            // /public/css/main.css
            // /public/js/main.js
            // 统一处理
            //  如果请求路径是以 /public/ 开头，则我们认为你要获取 public 中的某些静态资源
            //  所以我们就直接可以把请求路径当做文件路径来直接进行读取
            // console.log(url)

            fs.readFile('.'+pathname,function (err,data) {
                console.log(err)
                if (err) {
                    return res.end('404 Not Found.')
                } 
                res.end(data)
            })
            // res.end()
        }else{
            // 其他路径都改成404 页面
            fs.readFile('./views/404.html',function (err,data) {
              if (err) {
                  return res.end('404 Not Found.')
              } else {
                  res.end(data)
              }  
            })
        }
    })
    .listen(3000,function () {
        console.log('running...')
    })
